package nodeList;

import java.util.List;

/**
 * 给定一个链表，旋转链表，将链表每个节点向右移动 k 个位置，其中 k 是非负数。
 * @author le
 */
public class RotateList
{
    public static void main(String[] args)
    {

    }

    /**
     * 先把链表成环
     * 1. 遍历链表 获得链表的长度
     * 2. 然后用 k mod len 获得具体的位置
     * 3. 注意：是这个 k 是从链表尾部开始的
     * 4. 然后 获得指针的前一个指针 便于后面 断开环
     * @param head
     * @param k
     * @return
     */
    public ListNode rotateRight(ListNode head, int k) {
        ListNode pre = head;
        int len = 0;
        while(pre.next != null){
            pre = pre.next;
            len++;
        }
        pre.next = head;
        int count = k % len;
        ListNode tmp = new ListNode();
        tmp.next  = head;
        ListNode res = head;
        for (int i = 0;i < count;i++){

            tmp = tmp.next;
            res = res.next;
        }
        tmp.next = null;
        return res;
    }
}
